home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Visual Basic 4 Database How-To
/
Visual Basic 4 Database - How-to (The Waite Group)(1995).iso
/
odbcapi.ba_
/
odbcapi.ba
Wrap
Text File
|
1995-07-19
|
60KB
|
1,737 lines
Attribute VB_Name = "modODBCAPI"
Option Explicit
Option Private Module
'This file contains the complete set of function
' declarations and constants for the ODBC API. To save
' a significant chunk of memory, it is recommended that
' you include only the constants that apply to your
' project!
#Const ODBCVER = &H210 'The current version of ODBC
' Miscellaneous Windows API constants:
Public Const DEFAULT = 0
Public Const HOURGLASS = 11
Public Const MODAL = 1
'Window state
Public Const NORMAL = 0 ' 0 - Normal
Public Const MINIMIZED = 1 ' 1 - Minimized
Public Const MAXIMIZED = 2 ' 2 - Maximized
' Windows API functions used:
#If Win32 Then
Declare Function GetFocus Lib "User32" () As Long
Declare Function GetParent Lib "User32" (ByVal hWnd%) As Long
#Else
Declare Function GetFocus Lib "User" () As Integer
Declare Function GetParent Lib "User" (ByVal hWnd&) As Integer
#End If
'*********************************************************
' Public variables for ODBC handles and arrays
'*********************************************************
Public ghEnv As Long
Public ghDbc As Long
Public ghStmt As Long
Public Const NULL_POINTER = 0
Public Const MB_ICONSTOP = 16 ' Critical message
Public Const MB_ICONQUESTION = 32 ' Warning query
Public Const MB_ICONEXCLAMATION = 48 ' Warning message
Public Const MB_ICONINFORMATION = 64 ' Information mess
'There are more at the end, the ones requiring ODBC constants
'*********************************************************
' Start of ODBC API declarations
'*********************************************************
' ODBC Module Core Declarations
'*********************************************************
'
' ODBC Core API Declarations
'
#If Win32 Then
Declare Function SQLAllocConnect Lib "odbc32.dll" (ByVal ghEnv&, phdbc&) As Integer
Declare Function SQLAllocEnv Lib "odbc32.dll" (phenv&) As Integer
Declare Function SQLDisconnect Lib "odbc32.dll" (ByVal hDbc&) As Integer
Declare Function SQLError Lib "odbc32.dll" (ByVal hEnv&, ByVal hDbc&, ByVal hstmt&, ByVal szSqlState$, pfNativeError&, ByVal szErrorMsg$, ByVal cbErrorMsgMax%, pcbErrorMsg&) As Integer
Declare Function SQLConnect Lib "odbc32.dll" (ByVal hDbc&, ByVal szDSN$, ByVal cbDSN%, ByVal szUID$, ByVal cbUID%, ByVal szAuthStr$, ByVal cbAuthStr%) As Integer
Declare Function SQLAllocStmt Lib "odbc32.dll" (ByVal hDbc&, phstmt&) As Integer
Declare Function SQLFreeStmt Lib "odbc32.dll" (ByVal hstmt&, ByVal fOption%) As Integer
Declare Function SQLFreeConnect Lib "odbc32.dll" (ByVal hDbc&) As Integer
Declare Function SQLFreeEnv Lib "odbc32.dll" (ByVal hEnv&) As Integer
#Else
Declare Function SQLAllocConnect Lib "odbc.dll" (ByVal ghEnv&, phdbc&) As Integer
Declare Function SQLAllocEnv Lib "odbc.dll" (phenv&) As Integer
Declare Function SQLDisconnect Lib "odbc.dll" (ByVal hDbc&) As Integer
Declare Function SQLError Lib "odbc.dll" (ByVal hEnv&, ByVal hDbc&, ByVal hstmt&, ByVal szSqlState$, pfNativeError&, ByVal szErrorMsg$, ByVal cbErrorMsgMax%, pcbErrorMsg%) As Integer
Declare Function SQLConnect Lib "odbc.dll" (ByVal hDbc&, ByVal szDSN$, ByVal cbDSN%, ByVal szUID$, ByVal cbUID%, ByVal szAuthStr$, ByVal cbAuthStr%) As Integer
Declare Function SQLAllocStmt Lib "odbc.dll" (ByVal hDbc&, phstmt&) As Integer
Declare Function SQLFreeStmt Lib "odbc.dll" (ByVal hstmt&, ByVal fOption%) As Integer
Declare Function SQLFreeConnect Lib "odbc.dll" (ByVal hDbc&) As Integer
Declare Function SQLFreeEnv Lib "odbc.dll" (ByVal hEnv&) As Integer
#End If
'*********************************************************
' ODBC Module Extended Definitions
'*********************************************************
' ODBC Extended API Declarations
' Level 1 Prototypes
#If Win32 Then
Declare Function SQLDriverConnect Lib "odbc32.dll" (ByVal hDbc&, ByVal hWnd&, ByVal szCSIn$, ByVal cbCSIn%, ByVal szCSOut$, ByVal cbCSMax%, cbCSOut&, ByVal fDrvrComp%) As Integer
Declare Function SQLGetFunctions Lib "odbc32.dll" (ByVal hDbc&, ByVal fFunction%, pfExists%) As Integer
Declare Function SQLGetInfo Lib "odbc32.dll" (ByVal hDbc&, ByVal fInfoType%, rgbInfoValue As Any, ByVal cbInfoMax%, cbInfoOut&) As Integer
Declare Function SQLGetConnectOption Lib "odbc32.dll" (ByVal hDbc&, ByVal fOption%, pvParam As Any) As Integer
Declare Function SQLSetConnectOption Lib "odbc32.dll" (ByVal hDbc&, ByVal fOption%, ByVal vParam&) As Integer
#Else
Declare Function SQLDriverConnect Lib "odbc.dll" (ByVal hDbc&, ByVal hWnd%, ByVal szCSIn$, ByVal cbCSIn%, ByVal szCSOut$, ByVal cbCSMax%, cbCSOut%, ByVal fDrvrComp%) As Integer
Declare Function SQLGetFunctions Lib "odbc.dll" (ByVal hDbc&, ByVal fFunction%, pfExists%) As Integer
Declare Function SQLGetInfo Lib "odbc.dll" (ByVal hDbc&, ByVal fInfoType%, rgbInfoValue As Any, ByVal cbInfoMax%, cbInfoOut%) As Integer
Declare Function SQLGetConnectOption Lib "odbc.dll" (ByVal hDbc&, ByVal fOption%, pvParam As Any) As Integer
Declare Function SQLSetConnectOption Lib "odbc.dll" (ByVal hDbc&, ByVal fOption%, ByVal vParam&) As Integer
#End If
' Level 2 Prototypes
#If Win32 Then
Declare Function SQLDataSources Lib "odbc32.dll" (ByVal hEnv&, ByVal fDirection%, ByVal szDSN$, ByVal cbDSNMax%, pcbDSN&, ByVal szDescription$, ByVal cbDescriptionMax%, pcbDescription&) As Integer
Declare Function SQLDrivers Lib "odbc32.dll" (ByVal hEnv&, ByVal fDirection%, ByVal szDriverDesc$, ByVal cbDriverDescMax%, pcbDriverDesc&, ByVal szDriverAttr$, ByVal cbDrvrAttrMax%, pcbDrvrAttr&) As Integer
#Else
Declare Function SQLDataSources Lib "odbc.dll" (ByVal hEnv&, ByVal fDirection%, ByVal szDSN$, ByVal cbDSNMax%, pcbDSN%, ByVal szDescription$, ByVal cbDescriptionMax%, pcbDescription%) As Integer
Declare Function SQLDrivers Lib "odbc.dll" (ByVal hEnv&, ByVal fDirection%, ByVal szDriverDesc$, ByVal cbDriverDescMax%, pcbDriverDesc%, ByVal szDriverAttr$, ByVal cbDrvrAttrMax%, pcbDrvrAttr%) As Integer
#End If
'*********************************************************
' ODBC Public Core Declarations
'*********************************************************
' ODBC Constants/Types
Public Const SQL_NTS = -3 ' NTS = Null Terminated String
Public Const SQL_SQLSTATE_SIZE = 5 ' size of SQLSTATE
Public Const SQL_MAX_MESSAGE_LENGTH = 512 ' message buffer size
Public Const SQL_MAX_DSN_LENGTH = 32 ' maximum data source name size
' RETCODEs
'
Public Const SQL_ERROR = -1
Public Const SQL_INVALID_HANDLE = -2
Public Const SQL_NO_DATA_FOUND = 100
Public Const SQL_SUCCESS = 0
Public Const SQL_SUCCESS_WITH_INFO = 1
' SQLFreeStmt defines
'
Public Const SQL_CLOSE = 0
Public Const SQL_DROP = 1
Public Const SQL_UNBIND = 2
Public Const SQL_RESET_PARAMS = 3
' SQLSetParam defines
'
Public Const SQL_C_DEFAULT = 99
' SQLTransact defines
'
Public Const SQL_COMMIT = 0
Public Const SQL_ROLLBACK = 1
' Standard SQL datatypes, using ANSI type numbering
'
Public Const SQL_CHAR = 1
Public Const SQL_NUMERIC = 2
Public Const SQL_DECIMAL = 3
Public Const SQL_INTEGER = 4
Public Const SQL_SMALLINT = 5
Public Const SQL_FLOAT = 6
Public Const SQL_REAL = 7
Public Const SQL_DOUBLE = 8
Public Const SQL_VARCHAR = 12
Public Const SQL_TYPE_MIN = 1
Public Const SQL_TYPE_NULL = 0
Public Const SQL_TYPE_MAX = 12
' C datatype to SQL datatype mapping SQL types
'
Public Const SQL_C_CHAR = SQL_CHAR ' CHAR, VARCHAR, DECIMAL, NUMERIC
Public Const SQL_C_LONG = SQL_INTEGER ' INTEGER
Public Const SQL_C_SHORT = SQL_SMALLINT ' SMALLINT
Public Const SQL_C_FLOAT = SQL_REAL ' REAL
Public Const SQL_C_DOUBLE = SQL_DOUBLE ' FLOAT, DOUBLE
' NULL status constants. These are used in SQLColumns, SQLColAttributes,
' SQLDescribeCol, and SQLSpecialColumns to describe the nullablity of a
' column in a table. SQL_NULLABLE_UNKNOWN can be returned only by
' SQLDescribeCol or SQLColAttributes. It is used when the DBMS's meta-data
' does not contain this info.
'
Public Const SQL_NO_NULLS = 0
Public Const SQL_NULLABLE = 1
Public Const SQL_NULLABLE_UNKNOWN = 2
' Special length values
'
Public Const SQL_NULL_DATA = -1
Public Const SQL_DATA_AT_EXEC = -2
' SQLColAttributes defines
'
Public Const SQL_COLUMN_COUNT = 0
Public Const SQL_COLUMN_NAME = 1
Public Const SQL_COLUMN_TYPE = 2
Public Const SQL_COLUMN_LENGTH = 3
Public Const SQL_COLUMN_PRECISION = 4
Public Const SQL_COLUMN_SCALE = 5
Public Const SQL_COLUMN_DISPLAY_SIZE = 6
Public Const SQL_COLUMN_NULLABLE = 7
Public Const SQL_COLUMN_UNSIGNED = 8
Public Const SQL_COLUMN_MONEY = 9
Public Const SQL_COLUMN_UPDATABLE = 10
Public Const SQL_COLUMN_AUTO_INCREMENT = 11
Public Const SQL_COLUMN_CASE_SENSITIVE = 12
Public Const SQL_COLUMN_SEARCHABLE = 13
Public Const SQL_COLUMN_TYPE_NAME = 14
#If ODBCVER >= &H200 Then
Public Const SQL_COLUMN_TABLE_NAME = 15
Public Const SQL_COLUMN_OWNER_NAME = 16
Public Const SQL_COLUMN_QUALIFIER_NAME = 17
Public Const SQL_COLUMN_LABEL = 18
#Else
Public Const SQL_COLATT_OPT_MAX = SQL_COLUMN_LABEL
#End If 'ODBCVER >= &H200
' SQLColAttributes subdefines for SQL_COLUMN_UPDATABLE
'
Public Const SQL_ATTR_READONLY = 0
Public Const SQL_ATTR_WRITE = 1
Public Const SQL_ATTR_READWRITE_UNKNOWN = 2
' SQLColAttributes subdefines for SQL_COLUMN_SEARCHABLE
' These are also used by SQLGetInfo
'
Public Const SQL_UNSEARCHABLE = 0
Public Const SQL_LIKE_ONLY = 1
Public Const SQL_ALL_EXCEPT_LIKE = 2
Public Const SQL_SEARCHABLE = 3
' SQLError defines
'
Public Const SQL_NULL_HENV = 0
Public Const SQL_NULL_HDBC = 0
Public Const SQL_NULL_HSTMT = 0
'
'|========================================================================|
'| ODBC Public Extended Definitions |
'|========================================================================|
' Level 1 Definitions/Functions
'
Public Const SQL_MAX_OPTION_STRING_LENGTH = 256
' Additional return codes
'
Public Const SQL_STILL_EXECUTING = 2
Public Const SQL_NEED_DATA = 99
' SQL extended datatypes
'
Public Const SQL_DATE = 9
Public Const SQL_TIME = 10
Public Const SQL_TIMESTAMP = 11
Public Const SQL_LONGVARCHAR = -1
Public Const SQL_BINARY = -2
Public Const SQL_VARBINARY = -3
Public Const SQL_LONGVARBINARY = -4
Public Const SQL_BIGINT = -5
Public Const SQL_TINYINT = -6
Public Const SQL_BIT = -7
Public Const SQL_TYPE_DRIVER_START = -80
' C datatype to SQL datatype mapping
'
#If ODBCVER >= &H200 Then
Public Const SQL_SIGNED_OFFSET = -20
Public Const SQL_UNSIGNED_OFFSET = -22
#End If 'ODBCVER >= &H200
Public Const SQL_C_DATE = SQL_DATE
Public Const SQL_C_TIME = SQL_TIME
Public Const SQL_C_TIMESTAMP = SQL_TIMESTAMP
Public Const SQL_C_BINARY = SQL_BINARY
Public Const SQL_C_BIT = SQL_BIT
Public Const SQL_C_TINYINT = SQL_TINYINT
#If ODBCVER >= &H200 Then
Public Const SQL_C_SLONG = SQL_C_LONG + SQL_SIGNED_OFFSET
Public Const SQL_C_SSHORT = SQL_C_SHORT + SQL_SIGNED_OFFSET
Public Const SQL_C_STINYINT = SQL_TINYINT + SQL_SIGNED_OFFSET
Public Const SQL_C_ULONG = SQL_C_LONG + SQL_UNSIGNED_OFFSET
Public Const SQL_C_USHORT = SQL_C_SHORT + SQL_UNSIGNED_OFFSET
Public Const SQL_C_UTINYINT = SQL_TINYINT + SQL_UNSIGNED_OFFSET
Public Const SQL_C_BOOKMARK = SQL_C_ULONG
#End If 'ODBCVER >= &H200
Public Const SQL_ALL_TYPES = 0
'
' Date/Time/Timestamp Structs
'
Type DATE_STRUCT
year As Integer
month As Integer
day As Integer
End Type
Type TIME_STRUCT
hour As Integer
minute As Integer
second As Integer
End Type
Type TIMESTAMP_STRUCT
year As Integer
month As Integer
day As Integer
hour As Integer
minute As Integer
second As Integer
fraction As Long
End Type
' Options for SQLDriverConnect
'
Public Const SQL_DRIVER_NOPROMPT = 0
Public Const SQL_DRIVER_COMPLETE = 1
Public Const SQL_DRIVER_PROMPT = 2
Public Const SQL_DRIVER_COMPLETE_REQUIRED = 3
' Special return values for SQLGetData
'
Public Const SQL_NO_TOTAL = -4
' SQLSetParam extensions
#If ODBCVER >= &H200 Then
Public Const SQL_DEFAULT_PARAM = -5
Public Const SQL_IGNORE = -6
Public Const SQL_LEN_DATA_AT_EXEC_OFFSET = -100
#End If 'ODBCVER >= &H200
' Defines for SQLGetFunctions
' Core Functions
'
Public Const SQL_API_SQLALLOCCONNECT = 1
Public Const SQL_API_SQLALLOCENV = 2
Public Const SQL_API_SQLALLOCSTMT = 3
Public Const SQL_API_SQLBINDCOL = 4
Public Const SQL_API_SQLCANCEL = 5
Public Const SQL_API_SQLCOLATTRIBUTES = 6
Public Const SQL_API_SQLCONNECT = 7
Public Const SQL_API_SQLDESCRIBECOL = 8
Public Const SQL_API_SQLDISCONNECT = 9
Public Const SQL_API_SQLERROR = 10
Public Const SQL_API_SQLEXECDIRECT = 11
Public Const SQL_API_SQLEXECUTE = 12
Public Const SQL_API_SQLFETCH = 13
Public Const SQL_API_SQLFREECONNECT = 14
Public Const SQL_API_SQLFREEENV = 15
Public Const SQL_API_SQLFREESTMT = 16
Public Const SQL_API_SQLGETCURSORNAME = 17
Public Const SQL_API_SQLNUMRESULTCOLS = 18
Public Const SQL_API_SQLPREPARE = 19
Public Const SQL_API_SQLROWCOUNT = 20
Public Const SQL_API_SQLSETCURSORNAME = 21
Public Const SQL_API_SQLSETPARAM = 22
Public Const SQL_API_SQLTRANSACT = 23
Public Const SQL_NUM_FUNCTIONS = 23
Public Const SQL_EXT_API_START = 40
' Level 1 Functions
'
Public Const SQL_API_SQLCOLUMNS = 40
Public Const SQL_API_SQLDRIVERCONNECT = 41
Public Const SQL_API_SQLGETCONNECTOPTION = 42
Public Const SQL_API_SQLGETDATA = 43
Public Const SQL_API_SQLGETFUNCTIONS = 44
Public Const SQL_API_SQLGETINFO = 45
Public Const SQL_API_SQLGETSTMTOPTION = 46
Public Const SQL_API_SQLGETTYPEINFO = 47
Public Const SQL_API_SQLPARAMDATA = 48
Public Const SQL_API_SQLPUTDATA = 49
Public Const SQL_API_SQLSETCONNECTOPTION = 50
Public Const SQL_API_SQLSETSTMTOPTION = 51
Public Const SQL_API_SQLSPECIALCOLUMNS = 52
Public Const SQL_API_SQLSTATISTICS = 53
Public Const SQL_API_SQLTABLES = 54
' Level 2 Functions
'
Public Const SQL_API_SQLBROWSECONNECT = 55
Public Const SQL_API_SQLCOLUMNPRIVILEGES = 56
Public Const SQL_API_SQLDATASOURCES = 57
Public Const SQL_API_SQLDESCRIBEPARAM = 58
Public Const SQL_API_SQLEXTENDEDFETCH = 59
Public Const SQL_API_SQLFOREIGNKEYS = 60
Public Const SQL_API_SQLMORERESULTS = 61
Public Const SQL_API_SQLNATIVESQL = 62
Public Const SQL_API_SQLNUMPARAMS = 63
Public Const SQL_API_SQLPARAMOPTIONS = 64
Public Const SQL_API_SQLPRIMARYKEYS = 65
Public Const SQL_API_SQLPROCEDURECOLUMNS = 66
Public Const SQL_API_SQLPROCEDURES = 67
Public Const SQL_API_SQLSETPOS = 68
Public Const SQL_API_SQLSETSCROLLOPTIONS = 69
Public Const SQL_API_SQLTABLEPRIVILEGES = 70
#If ODBCVER >= &H200 Then
Public Const SQL_API_SQLDRIVERS = 71
Public Const SQL_API_SQLBINDPARAMETER = 72
Public Const SQL_EXT_API_LAST = 72
#Else
Public Const SQL_EXT_API_LAST = SQL_API_SQLTABLEPRIVILEGES
#End If 'ODBCVER >= &H200
Public Const SQL_API_ALL_FUNCTIONS = 0
Public Const SQL_NUM_EXTENSIONS = (SQL_EXT_API_LAST - SQL_EXT_API_START + 1)
#If ODBCVER >= &H200 Then
Public Const SQL_API_LOADBYORDINAL = 199
#End If 'ODBCVER >= &H200
' Defines for SQLGetInfo
'
Public Const SQL_INFO_FIRST = 0
Public Const SQL_ACTIVE_CONNECTIONS = 0
Public Const SQL_ACTIVE_STATEMENTS = 1
Public Const SQL_DATA_SOURCE_NAME = 2
Public Const SQL_DRIVER_HDBC = 3
Public Const SQL_DRIVER_HENV = 4
Public Const SQL_DRIVER_HSTMT = 5
Public Const SQL_DRIVER_NAME = 6
Public Const SQL_DRIVER_VER = 7
Public Const SQL_FETCH_DIRECTION = 8
Public Const SQL_ODBC_API_CONFORMANCE = 9
Public Const SQL_ODBC_VER = 10
Public Const SQL_ROW_UPDATES = 11
Public Const SQL_ODBC_SAG_CLI_CONFORMANCE = 12
Public Const SQL_SERVER_NAME = 13
Public Const SQL_SEARCH_PATTERN_ESCAPE = 14
Public Const SQL_ODBC_SQL_CONFORMANCE = 15
Public Const SQL_DBMS_NAME = 17
Public Const SQL_DBMS_VER = 18
Public Const SQL_ACCESSIBLE_TABLES = 19
Public Const SQL_ACCESSIBLE_PROCEDURES = 20
Public Const SQL_PROCEDURES = 21
Public Const SQL_CONCAT_NULL_BEHAVIOR = 22
Public Const SQL_CURSOR_COMMIT_BEHAVIOR = 23
Public Const SQL_CURSOR_ROLLBACK_BEHAVIOR = 24
Public Const SQL_DATA_SOURCE_READ_ONLY = 25
Public Const SQL_DEFAULT_TXN_ISOLATION = 26
Public Const SQL_EXPRESSIONS_IN_ORDERBY = 27
Public Const SQL_IDENTIFIER_CASE = 28
Public Const SQL_IDENTIFIER_QUOTE_CHAR = 29
Public Const SQL_MAX_COLUMN_NAME_LEN = 30
Public Const SQL_MAX_CURSOR_NAME_LEN = 31
Public Const SQL_MAX_OWNER_NAME_LEN = 32
Public Const SQL_MAX_PROCEDURE_NAME_LEN = 33
Public Const SQL_MAX_QUALIFIER_NAME_LEN = 34
Public Const SQL_MAX_TABLE_NAME_LEN = 35
Public Const SQL_MULT_RESULT_SETS = 36
Public Const SQL_MULTIPLE_ACTIVE_TXN = 37
Public Const SQL_OUTER_JOINS = 38
Public Const SQL_OWNER_TERM = 39
Public Const SQL_PROCEDURE_TERM = 40
Public Const SQL_QUALIFIER_NAME_SEPARATOR = 41
Public Const SQL_QUALIFIER_TERM = 42
Public Const SQL_SCROLL_CONCURRENCY = 43
Public Const SQL_SCROLL_OPTIONS = 44
Public Const SQL_TABLE_TERM = 45
Public Const SQL_TXN_CAPABLE = 46
Public Const SQL_USER_NAME = 47
Public Const SQL_CONVERT_FUNCTIONS = 48
Public Const SQL_NUMERIC_FUNCTIONS = 49
Public Const SQL_STRING_FUNCTIONS = 50
Public Const SQL_SYSTEM_FUNCTIONS = 51
Public Const SQL_TIMEDATE_FUNCTIONS = 52
Public Const SQL_CONVERT_BIGINT = 53
Public Const SQL_CONVERT_BINARY = 54
Public Const SQL_CONVERT_BIT = 55
Public Const SQL_CONVERT_CHAR = 56
Public Const SQL_CONVERT_DATE = 57
Public Const SQL_CONVERT_DECIMAL = 58
Public Const SQL_CONVERT_DOUBLE = 59
Public Const SQL_CONVERT_FLOAT = 60
Public Const SQL_CONVERT_INTEGER = 61
Public Const SQL_CONVERT_LONGVARCHAR = 62
Public Const SQL_CONVERT_NUMERIC = 63
Public Const SQL_CONVERT_REAL = 64
Public Const SQL_CONVERT_SMALLINT = 65
Public Const SQL_CONVERT_TIME = 66
Public Const SQL_CONVERT_TIMESTAMP = 67
Public Const SQL_CONVERT_TINYINT = 68
Public Const SQL_CONVERT_VARBINARY = 69
Public Const SQL_CONVERT_VARCHAR = 70
Public Const SQL_CONVERT_LONGVARBINARY = 71
Public Const SQL_TXN_ISOLATION_OPTION = 72
Public Const SQL_ODBC_SQL_OPT_IEF = 73
Public Const SQL_CORRELATION_NAME = 74
Public Const SQL_NON_NULLABLE_COLUMNS = 75
#If ODBCVER >= &H200 Then
Public Const SQL_DRIVER_HLIB = 76
Public Const SQL_DRIVER_ODBC_VER = 77
Public Const SQL_LOCK_TYPES = 78
Public Const SQL_POS_OPERATIONS = 79
Public Const SQL_POSITIONED_STATEMENTS = 80
Public Const SQL_GETDATA_EXTENSIONS = 81
Public Const SQL_BOOKMARK_PERSISTENCE = 82
Public Const SQL_STATIC_SENSITIVITY = 83
Public Const SQL_FILE_USAGE = 84
Public Const SQL_NULL_COLLATION = 85
Public Const SQL_ALTER_TABLE = 86
Public Const SQL_COLUMN_ALIAS = 87
Public Const SQL_GROUP_BY = 88
Public Const SQL_KEYWORDS = 89
Public Const SQL_ORDER_BY_COLUMNS_IN_SELECT = 90
Public Const SQL_OWNER_USAGE = 91
Public Const SQL_QUALIFIER_USAGE = 92
Public Const SQL_QUOTED_IDENTIFIER_CASE = 93
Public Const SQL_SPECIAL_CHARACTERS = 94
Public Const SQL_SUBQUERIES = 95
Public Const SQL_UNION = 96
Public Const SQL_MAX_COLUMNS_IN_GROUP_BY = 97
Public Const SQL_MAX_COLUMNS_IN_INDEX = 98
Public Const SQL_MAX_COLUMNS_IN_ORDER_BY = 99
Public Const SQL_MAX_COLUMNS_IN_SELECT = 100
Public Const SQL_MAX_COLUMNS_IN_TABLE = 101
Public Const SQL_MAX_INDEX_SIZE = 102
Public Const SQL_MAX_ROW_SIZE_INCLUDES_LONG = 103
Public Const SQL_MAX_ROW_SIZE = 104
Public Const SQL_MAX_STATEMENT_LEN = 105
Public Const SQL_MAX_TABLES_IN_SELECT = 106
Public Const SQL_MAX_USER_NAME_LEN = 107
Public Const SQL_MAX_CHAR_LITERAL_LEN = 108
Public Const SQL_TIMEDATE_ADD_INTERVALS = 109
Public Const SQL_TIMEDATE_DIFF_INTERVALS = 110
Public Const SQL_NEED_LONG_DATA_LEN = 111
Public Const SQL_MAX_BINARY_LITERAL_LEN = 112
Public Const SQL_LIKE_ESCAPE_CLAUSE = 113
Public Const SQL_QUALIFIER_LOCATION = 114
#If ODBCVER >= &H210 Then
Public Const SQL_OJ_CAPABILITIES = 65003 'Temp value until ODBC 3.0
#End If 'ODBCVER >= &H210
Public Const SQL_INFO_LAST = SQL_QUALIFIER_LOCATION
#Else
Public Const SQL_INFO_LAST = SQL_NON_NULLABLE_COLUMNS
#End If 'ODBCVER >= &H200
Public Const SQL_INFO_DRIVER_START = 1000
' "SQL_CONVERT_" return value bitmasks
'
Public Const SQL_CVT_CHAR = &H1&
Public Const SQL_CVT_NUMERIC = &H2&
Public Const SQL_CVT_DECIMAL = &H4&
Public Const SQL_CVT_INTEGER = &H8&
Public Const SQL_CVT_SMALLINT = &H10&
Public Const SQL_CVT_FLOAT = &H20&
Public Const SQL_CVT_REAL = &H40&
Public Const SQL_CVT_DOUBLE = &H80&
Public Const SQL_CVT_VARCHAR = &H100&
Public Const SQL_CVT_LONGVARCHAR = &H200&
Public Const SQL_CVT_BINARY = &H400&
Public Const SQL_CVT_VARBINARY = &H800&
Public Const SQL_CVT_BIT = &H1000&
Public Const SQL_CVT_TINYINT = &H2000&
Public Const SQL_CVT_BIGINT = &H4000&
Public Const SQL_CVT_DATE = &H8000&
Public Const SQL_CVT_TIME = &H10000
Public Const SQL_CVT_TIMESTAMP = &H20000
Public Const SQL_CVT_LONGVARBINARY = &H40000
' Conversion functions
'
Public Const SQL_FN_CVT_CONVERT = &H1&
' String functions
'
Public Const SQL_FN_STR_CONCAT = &H1&
Public Const SQL_FN_STR_INSERT = &H2&
Public Const SQL_FN_STR_LEFT = &H4&
Public Const SQL_FN_STR_LTRIM = &H8&
Public Const SQL_FN_STR_LENGTH = &H10&
Public Const SQL_FN_STR_LOCATE = &H20&
Public Const SQL_FN_STR_LCASE = &H40&
Public Const SQL_FN_STR_REPEAT = &H80&
Public Const SQL_FN_STR_REPLACE = &H100&
Public Const SQL_FN_STR_RIGHT = &H200&
Public Const SQL_FN_STR_RTRIM = &H400&
Public Const SQL_FN_STR_SUBSTRING = &H800&
Public Const SQL_FN_STR_UCASE = &H1000&
Public Const SQL_FN_STR_ASCII = &H2000&
Public Const SQL_FN_STR_CHAR = &H4000&
#If ODBCVER >= &H200 Then
Public Const SQL_FN_STR_DIFFERENCE = &H8000&
Public Const SQL_FN_STR_LOCATE_2 = &H10000
Public Const SQL_FN_STR_SOUNDEX = &H20000
Public Const SQL_FN_STR_SPACE = &H40000
#End If 'ODBCVER >= &H200
' Numeric functions
'
Public Const SQL_FN_NUM_ABS = &H1&
Public Const SQL_FN_NUM_ACOS = &H2&
Public Const SQL_FN_NUM_ASIN = &H4&
Public Const SQL_FN_NUM_ATAN = &H8&
Public Const SQL_FN_NUM_ATAN2 = &H10&
Public Const SQL_FN_NUM_CEILING = &H20&
Public Const SQL_FN_NUM_COS = &H40&
Public Const SQL_FN_NUM_COT = &H80&
Public Const SQL_FN_NUM_EXP = &H100&
Public Const SQL_FN_NUM_FLOOR = &H200&
Public Const SQL_FN_NUM_LOG = &H400&
Public Const SQL_FN_NUM_MOD = &H800&
Public Const SQL_FN_NUM_SIGN = &H1000&
Public Const SQL_FN_NUM_SIN = &H2000&
Public Const SQL_FN_NUM_SQRT = &H4000&
Public Const SQL_FN_NUM_TAN = &H8000&
Public Const SQL_FN_NUM_PI = &H10000
Public Const SQL_FN_NUM_RAND = &H20000
#If ODBCVER >= &H200 Then
Public Const SQL_FN_NUM_DEGREES = &H40000
Public Const SQL_FN_NUM_LOG10 = &H80000
Public Const SQL_FN_NUM_POWER = &H100000
Public Const SQL_FN_NUM_RADIANS = &H200000
Public Const SQL_FN_NUM_ROUND = &H400000
Public Const SQL_FN_NUM_TRUNCATE = &H800000
#End If 'ODBCVER >= &H200
' Time/date functions
'
Public Const SQL_FN_TD_NOW = &H1&
Public Const SQL_FN_TD_CURDATE = &H2&
Public Const SQL_FN_TD_DAYOFMONTH = &H4&
Public Const SQL_FN_TD_DAYOFWEEK = &H8&
Public Const SQL_FN_TD_DAYOFYEAR = &H10&
Public Const SQL_FN_TD_MONTH = &H20&
Public Const SQL_FN_TD_QUARTER = &H40&
Public Const SQL_FN_TD_WEEK = &H80&
Public Const SQL_FN_TD_YEAR = &H100&
Public Const SQL_FN_TD_CURTIME = &H200&
Public Const SQL_FN_TD_HOUR = &H400&
Public Const SQL_FN_TD_MINUTE = &H800&
Public Const SQL_FN_TD_SECOND = &H1000&
#If ODBCVER >= &H200 Then
Public Const SQL_FN_TD_TIMESTAMPADD = &H2000&
Public Const SQL_FN_TD_TIMESTAMPDIFF = &H4000&
Public Const SQL_FN_TD_DAYNAME = &H8000&
Public Const SQL_FN_TD_MONTHNAME = &H10000
#End If 'ODBCVER >= &H200
' System functions
'
Public Const SQL_FN_SYS_USERNAME = &H1&
Public Const SQL_FN_SYS_DBNAME = &H2&
Public Const SQL_FN_SYS_IFNULL = &H4&
' Timedate intervals
'
#If ODBCVER >= &H200 Then
Public Const SQL_FN_TSI_FRAC_SECOND = &H1&
Public Const SQL_FN_TSI_SECOND = &H2&
Public Const SQL_FN_TSI_MINUTE = &H4&
Public Const SQL_FN_TSI_HOUR = &H8&
Public Const SQL_FN_TSI_DAY = &H10&
Public Const SQL_FN_TSI_WEEK = &H20&
Public Const SQL_FN_TSI_MONTH = &H40&
Public Const SQL_FN_TSI_QUARTER = &H80&
Public Const SQL_FN_TSI_YEAR = &H100&
#End If 'ODBCVER >= &H200
' ODBC API conformance
'
Public Const SQL_OAC_NONE = 0
Public Const SQL_OAC_LEVEL1 = 1
Public Const SQL_OAC_LEVEL2 = 2
' SAG CLI conformance
'
Public Const SQL_OSCC_NOT_COMPLIANT = 0
Public Const SQL_OSCC_COMPLIANT = 1
' ODBC SQL conformance
'
Public Const SQL_OSC_MINIMUM = 0
Public Const SQL_OSC_CORE = 1
Public Const SQL_OSC_EXTENDED = 2
' Concatenation behavior
'
Public Const SQL_CB_NULL = 0
Public Const SQL_CB_NON_NULL = 1
' Cursor commit behavior
'
Public Const SQL_CB_DELETE = 0
Public Const SQL_CB_CLOSE = 1
Public Const SQL_CB_PRESERVE = 2
' Identifier case
'
Public Const SQL_IC_UPPER = 1
Public Const SQL_IC_LOWER = 2
Public Const SQL_IC_SENSITIVE = 3
Public Const SQL_IC_MIXED = 4
' Transaction capable
'
Public Const SQL_TC_NONE = 0
Public Const SQL_TC_DML = 1
Public Const SQL_TC_ALL = 2
#If ODBCVER >= &H200 Then
Public Const SQL_TC_DDL_COMMIT = 3
Public Const SQL_TC_DDL_IGNORE = 4
#End If 'ODBCVER >= &H200
' Scroll option masks
'
Public Const SQL_SO_FORWARD_ONLY = &H1&
Public Const SQL_SO_KEYSET_DRIVEN = &H2&
Public Const SQL_SO_DYNAMIC = &H4&
Public Const SQL_SO_MIXED = &H8&
#If ODBCVER >= &H200 Then
Public Const SQL_SO_STATIC = &H10&
#End If 'ODBCVER >= &H200
' Scroll concurrency option masks
'
Public Const SQL_SCCO_READ_ONLY = &H1&
Public Const SQL_SCCO_LOCK = &H2&
Public Const SQL_SCCO_OPT_ROWVER = &H4&
Public Const SQL_SCCO_OPT_VALUES = &H8&
' Fetch direction option masks
'
Public Const SQL_FD_FETCH_NEXT = &H1&
Public Const SQL_FD_FETCH_FIRST = &H2&
Public Const SQL_FD_FETCH_LAST = &H4&
Public Const SQL_FD_FETCH_PRIOR = &H8&
Public Const SQL_FD_FETCH_ABSOLUTE = &H10&
Public Const SQL_FD_FETCH_RELATIVE = &H20&
Public Const SQL_FD_FETCH_RESUME = &H40&
#If ODBCVER >= &H200 Then
Public Const SQL_FD_FETCH_BOOKMARK = &H80&
#End If 'ODBCVER >= &H200
' Transaction isolation option masks
'
Public Const SQL_TXN_READ_UNCOMMITTED = &H1&
Public Const SQL_TXN_READ_COMMITTED = &H2&
Public Const SQL_TXN_REPEATABLE_READ = &H4&
Public Const SQL_TXN_SERIALIZABLE = &H8&
Public Const SQL_TXN_VERSIONING = &H10&
' Correlation name
'
Public Const SQL_CN_NONE = 0
Public Const SQL_CN_DIFFERENT = 1
Public Const SQL_CN_ANY = 2
' Non-nullable columns
'
Public Const SQL_NNC_NULL = 0
Public Const SQL_NNC_NON_NULL = 1
' Null collation
'
#If ODBCVER >= &H200 Then
Public Const SQL_NC_HIGH = 0
Public Const SQL_NC_LOW = 1
Public Const SQL_NC_START = 2
Public Const SQL_NC_END = 4
' File usage
'
Public Const SQL_FILE_NOT_SUPPORTED = 0
Public Const SQL_FILE_TABLE = 1
Public Const SQL_FILE_QUALIFIER = 2
' SQLGetData extensions masks
'
Public Const SQL_GD_ANY_COLUMN = &H1&
Public Const SQL_GD_ANY_ORDER = &H2&
Public Const SQL_GD_BLOCK = &H4&
Public Const SQL_GD_BOUND = &H8&
' Alter table
'
Public Const SQL_AT_ADD_COLUMN = 1
Public Const SQL_AT_DROP_COLUMN = 2
' Positioned statements masks
'
Public Const SQL_PS_POSITIONED_DELETE = &H1&
Public Const SQL_PS_POSITIONED_UPDATE = &H2&
Public Const SQL_PS_SELECT_FOR_UPDATE = &H4&
' Group By
'
Public Const SQL_GB_NOT_SUPPORTED = 0
Public Const SQL_GB_GROUP_BY_EQUALS_SELECT = 1
Public Const SQL_GB_GROUP_BY_CONTAINS_SELECT = 2
Public Const SQL_GB_NO_RELATION = 3
' Owner usage masks
'
Public Const SQL_OU_DML_STATEMENTS = &H1&
Public Const SQL_OU_PROCEDURE_INVOCATION = &H2&
Public Const SQL_OU_TABLE_DEFINITION = &H4&
Public Const SQL_OU_INDEX_DEFINITION = &H8&
Public Const SQL_OU_PRIVILEGE_DEFINITION = &H10&
' Qualifier usage masks
'
Public Const SQL_QU_DML_STATEMENTS = &H1&
Public Const SQL_QU_PROCEDURE_INVOCATION = &H2&
Public Const SQL_QU_TABLE_DEFINITION = &H4&
Public Const SQL_QU_INDEX_DEFINITION = &H8&
Public Const SQL_QU_PRIVILEGE_DEFINITION = &H10&
' Subqueries masks
'
Public Const SQL_SQ_COMPARISON = &H1&
Public Const SQL_SQ_EXISTS = &H2&
Public Const SQL_SQ_IN = &H4&
Public Const SQL_SQ_QUANTIFIED = &H8&
Public Const SQL_SQ_CORRELATED_SUBQUERIES = &H10&
' Union masks
'
Public Const SQL_U_UNION = &H1&
Public Const SQL_U_UNION_ALL = &H2&
' Bookmark persistence
'
Public Const SQL_BP_CLOSE = &H1&
Public Const SQL_BP_DELETE = &H2&
Public Const SQL_BP_DROP = &H4&
Public Const SQL_BP_TRANSACTION = &H8&
Public Const SQL_BP_UPDATE = &H10&
Public Const SQL_BP_OTHER_HSTMT = &H20&
Public Const SQL_BP_SCROLL = &H40&
' Static sensitivity
'
Public Const SQL_SS_ADDITIONS = &H1&
Public Const SQL_SS_DELETIONS = &H2&
Public Const SQL_SS_UPDATES = &H4&
' Lock types masks
'
Public Const SQL_LCK_NO_CHANGE = &H1&
Public Const SQL_LCK_EXCLUSIVE = &H2&
Public Const SQL_LCK_UNLOCK = &H4&
' Positioned operations masks
'
Public Const SQL_POS_POSITION = &H1&
Public Const SQL_POS_REFRESH = &H2&
Public Const SQL_POS_UPDATE = &H4&
Public Const SQL_POS_DELETE = &H8&
Public Const SQL_POS_ADD = &H10&
' Qualifier location
'
Public Const SQL_QL_START = 1
Public Const SQL_QL_END = 2
' Options for SQL_OJ_CAPABILITIES in SQLGetInfo
#If ODBCVER >= &H201 Then
Public Const SQL_OJ_LEFT = 1
Public Const SQL_OJ_RIGHT = 2
Public Const SQL_OJ_FULL = 4
Public Const SQL_OJ_NESTED = 8
Public Const SQL_OJ_NOT_ORDERED = 16
Public Const SQL_OJ_INNER = 32
Public Const SQL_OJ_ALL_COMPARISON_OPS = 64
#End If 'ODBCVER >= &H201
#End If 'ODBCVER >= &H200
' Options for SQLGetStmtOption/SQLSetStmtOption
'
Public Const SQL_QUERY_TIMEOUT = 0
Public Const SQL_MAX_ROWS = 1
Public Const SQL_NOSCAN = 2
Public Const SQL_MAX_LENGTH = 3
Public Const SQL_ASYNC_ENABLE = 4
Public Const SQL_BIND_TYPE = 5
#If ODBCVER >= &H200 Then
Public Const SQL_CURSOR_TYPE = 6
Public Const SQL_CONCURRENCY = 7
Public Const SQL_KEYSET_SIZE = 8
Public Const SQL_ROWSET_SIZE = 9
Public Const SQL_SIMULATE_CURSOR = 10
Public Const SQL_RETRIEVE_DATA = 11
Public Const SQL_USE_BOOKMARKS = 12
Public Const SQL_GET_BOOKMARK = 13
Public Const SQL_ROW_NUMBER = 14
Public Const SQL_STMT_OPT_MAX = SQL_ROW_NUMBER
#Else
Public Const SQL_STMT_OPT_MAX = SQL_BIND_TYPE
#End If 'ODBCVER >= &H200
Public Const SQL_STMT_OPT_MIN = SQL_QUERY_TIMEOUT
' Statement option values & defaults
'
Public Const SQL_QUERY_TIMEOUT_DEFAULT = 0
Public Const SQL_MAX_ROWS_DEFAULT = 0
Public Const SQL_NOSCAN_OFF = 0
Public Const SQL_NOSCAN_ON = 1
Public Const SQL_NOSCAN_DEFAULT = SQL_NOSCAN_OFF
Public Const SQL_MAX_LENGTH_DEFAULT = 0
Public Const SQL_ASYNC_ENABLE_OFF = 0
Public Const SQL_ASYNC_ENABLE_ON = 1
Public Const SQL_ASYNC_ENABLE_DEFAULT = SQL_ASYNC_ENABLE_OFF
Public Const SQL_BIND_BY_COLUMN = 0
Public Const SQL_CONCUR_READ_ONLY = 1
Public Const SQL_CONCUR_LOCK = 2
Public Const SQL_CONCUR_ROWVER = 3
Public Const SQL_CONCUR_VALUES = 4
#If ODBCVER >= &H200 Then
Public Const SQL_CURSOR_FORWARD_ONLY = 0
Public Const SQL_CURSOR_KEYSET_DRIVEN = 1
Public Const SQL_CURSOR_DYNAMIC = 2
Public Const SQL_CURSOR_STATIC = 3
Public Const SQL_CURSOR_TYPE_DEFAULT = SQL_CURSOR_FORWARD_ONLY 'Default value
' SQL_ROWSET_SIZE options
'
Public Const SQL_ROWSET_SIZE_DEFAULT = 1
' SQL_KEYSET_SIZE options
'
Public Const SQL_KEYSET_SIZE_DEFAULT = 0
' SQL_SIMULATE_CURSOR options
'
Public Const SQL_SC_NON_UNIQUE = 0
Public Const SQL_SC_TRY_UNIQUE = 1
Public Const SQL_SC_UNIQUE = 2
' SQL_RETRIEVE_DATA options
'
Public Const SQL_RD_OFF = 0
Public Const SQL_RD_ON = 1
Public Const SQL_RD_DEFAULT = SQL_RD_ON
' SQL_USE_BOOKMARKS options
'
Public Const SQL_UB_OFF = 0
Public Const SQL_UB_ON = 1
Public Const SQL_UB_DEFAULT = SQL_UB_ON
#End If 'ODBCVER >= &H200
' Options for SQLSetConnectOption/SQLGetConnectOption
'
Public Const SQL_ACCESS_MODE = 101
Public Const SQL_AUTOCOMMIT = 102
Public Const SQL_LOGIN_TIMEOUT = 103
Public Const SQL_OPT_TRACE = 104
Public Const SQL_OPT_TRACEFILE = 105
Public Const SQL_TRANSLATE_DLL = 106
Public Const SQL_TRANSLATE_OPTION = 107
Public Const SQL_TXN_ISOLATION = 108
Public Const SQL_CURRENT_QUALIFIER = 109
Public Const SQL_CONNECT_OPT_DRVR_START = 1000
#If ODBCVER >= &H200 Then
Public Const SQL_ODBC_CURSORS = 110
Public Const SQL_QUIET_MODE = 111
Public Const SQL_PACKET_SIZE = 112
Public Const SQL_CONN_OPT_MAX = SQL_PACKET_SIZE
#Else
Public Const SQL_CONN_OPT_MAX = SQL_CURRENT_QUALIFIER
#End If 'ODBCVER >= &H200
Public Const SQL_CONN_OPT_MIN = SQL_ACCESS_MODE
' Access mode options
'
Public Const SQL_MODE_READ_WRITE = 0
Public Const SQL_MODE_READ_ONLY = 1
Public Const SQL_MODE_DEFAULT = SQL_MODE_READ_WRITE
' Autocommit options
'
Public Const SQL_AUTOCOMMIT_OFF = 0
Public Const SQL_AUTOCOMMIT_ON = 1
Public Const SQL_AUTOCOMMIT_DEFAULT = SQL_AUTOCOMMIT_ON
' Login timeout options
'
Public Const SQL_LOGIN_TIMEOUT_DEFAULT = 15
' Trace options
'
Public Const SQL_OPT_TRACE_OFF = 0
Public Const SQL_OPT_TRACE_ON = 1
Public Const SQL_OPT_TRACE_DEFAULT = SQL_OPT_TRACE_OFF
Public Const SQL_OPT_TRACE_FILE_DEFAULT = "\\SQL.LOG"
' Cursor options
'
#If ODBCVER >= &H200 Then
Public Const SQL_CUR_USE_IF_NEEDED = 0
Public Const SQL_CUR_USE_ODBC = 1
Public Const SQL_CUR_USE_DRIVER = 2
Public Const SQL_CUR_DEFAULT = SQL_CUR_USE_DRIVER
#End If 'ODBCVER >= &H200
' Column types and scopes in SQLSpecialColumns.
'
Public Const SQL_BEST_ROWID = 1
Public Const SQL_ROWVER = 2
Public Const SQL_SCOPE_CURROW = 0
Public Const SQL_SCOPE_TRANSACTION = 1
Public Const SQL_SCOPE_SESSION = 2
' Defines for SQLSetPos
'
Public Const SQL_ENTIRE_ROWSET = 0
Public Const SQL_POSITION = 0
Public Const SQL_REFRESH = 1
#If ODBCVER >= &H200 Then
Public Const SQL_UPDATE = 2
Public Const SQL_DELETE = 3
Public Const SQL_ADD = 4
#End If 'ODBCVER >= &H200
' Lock options
'
Public Const SQL_LOCK_NO_CHANGE = 0
Public Const SQL_LOCK_EXCLUSIVE = 1
#If ODBCVER >= &H200 Then
Public Const SQL_LOCK_UNLOCK = 2
#End If 'ODBCVER >= &H200
' Level 2 Functions
'
' SQLExtendedFetch "fFetchType" values
'
Public Const SQL_FETCH_NEXT = 1
Public Const SQL_FETCH_FIRST = 2
Public Const SQL_FETCH_LAST = 3
Public Const SQL_FETCH_PRIOR = 4
Public Const SQL_FETCH_ABSOLUTE = 5
Public Const SQL_FETCH_RELATIVE = 6
#If ODBCVER >= &H200 Then
Public Const SQL_FETCH_BOOKMARK = 8
#End If 'ODBCVER >= &H200
' SQLExtendedFetch "rgfRowStatus" element values
'
Public Const SQL_ROW_SUCCESS = 0
Public Const SQL_ROW_DELETED = 1
Public Const SQL_ROW_UPDATED = 2
Public Const SQL_ROW_NOROW = 3
#If ODBCVER >= &H200 Then
Public Const SQL_ROW_ADDED = 4
Public Const SQL_ROW_ERROR = 5
#End If 'ODBCVER >= &H200
' Defines for SQLForeignKeys (returned in result set)
'
Public Const SQL_CASCADE = 0
Public Const SQL_RESTRICT = 1
Public Const SQL_SET_NULL = 2
' Defines for SQLProcedureColumns (returned in the result set)
'
Public Const SQL_PARAM_TYPE_UNKNOWN = 0
Public Const SQL_PARAM_INPUT = 1
Public Const SQL_PARAM_INPUT_OUTPUT = 2
Public Const SQL_RESULT_COL = 3
#If ODBCVER >= &H200 Then
Public Const SQL_PARAM_OUTPUT = 4
#End If 'ODBCVER >= &H200
' Defines for SQLStatistics
'
Public Const SQL_INDEX_UNIQUE = 0
Public Const SQL_INDEX_ALL = 1
Public Const SQL_ENSURE = 1
Public Const SQL_QUICK = 0
' Defines for SQLStatistics (returned in the result set)
'
Public Const SQL_TABLE_STAT = 0
Public Const SQL_INDEX_CLUSTERED = 1
Public Const SQL_INDEX_HASHED = 2
Public Const SQL_INDEX_OTHER = 3
' Procedures
'
#If ODBCVER >= &H200 Then
Public Const SQL_PT_UNKNOWN = 0
Public Const SQL_PT_PROCEDURE = 1
Public Const SQL_PT_FUNCTION = 2
' Procedure columns
'
Public Const SQL_PC_UNKNOWN = 0
Public Const SQL_PC_NON_PSEUDO = 1
Public Const SQL_PC_PSEUDO = 2
#End If 'ODBCVER >= &H200
' Deprecated public const ants
'
Public Const SQL_DATABASE_NAME = 16
Public Const SQL_FD_FETCH_PREV = SQL_FD_FETCH_PRIOR
Public Const SQL_FETCH_PREV = SQL_FETCH_PRIOR
Public Const SQL_CONCUR_TIMESTAMP = SQL_CONCUR_ROWVER
Public Const SQL_SCCO_OPT_TIMESTAMP = SQL_SCCO_OPT_ROWVER
Public Const SQL_CC_DELETE = SQL_CB_DELETE
Public Const SQL_CR_DELETE = SQL_CB_DELETE
Public Const SQL_CC_CLOSE = SQL_CB_CLOSE
Public Const SQL_CR_CLOSE = SQL_CB_CLOSE
Public Const SQL_CC_PRESERVE = SQL_CB_PRESERVE
Public Const SQL_CR_PRESERVE = SQL_CB_PRESERVE
Public Const SQL_FETCH_RESUME = 7
Public Const SQL_SCROLL_FORWARD_ONLY = 0
Public Const SQL_SCROLL_KEYSET_DRIVEN = -1
Public Const SQL_SCROLL_DYNAMIC = -2
Public Const SQL_SCROLL_STATIC = -3
'*********************************************************
' End of the ODBC API constants
'*********************************************************
Public ODBCFuncs(2, SQL_EXT_API_LAST) As String
'User defined type for SQLGetInfo parameters
Type GetInfo
InfoType As String
ReturnType As String
End Type
'Array of GetInfo types
Public ODBCGetInfo(SQL_INFO_LAST) As GetInfo
'End of Declarations section
'*********************************************************
Function ODBCAllocateEnv(hEnv As Long)
Dim result As Integer
Dim saveCursor
ODBCLoadFuncs
LoadGetInfo
ODBCAllocateEnv = SQL_SUCCESS
saveCursor = Screen.MousePointer
Screen.MousePointer = HOURGLASS
result = SQLAllocEnv(hEnv)
Screen.MousePointer = DEFAULT
If result <> SQL_SUCCESS Then
ODBCAllocateEnv = result
result = ODBCError("Env", hEnv, 0, 0, result, "Environment Allocation Error")
Screen.MousePointer = saveCursor
ODBCAllocateEnv = result
End If
Screen.MousePointer = saveCursor
End Function
Function ODBCConnectDriver(hDbc As Long, hstmt As Long, Server As String)
'Establish a connection using SQLDriverConnect
Dim result As Integer
Dim S As String
Dim cbOut As Integer, rc As Integer
Dim saveCursor
saveCursor = Screen.MousePointer
Screen.MousePointer = HOURGLASS
ODBCConnectDriver = SQL_SUCCESS
Screen.MousePointer = DEFAULT
result = SQLAllocConnect(ghEnv, hDbc)
If result <> SQL_SUCCESS Then
ODBCConnectDriver = result
result = ODBCError("Dbc", ghEnv, hDbc, 0, result, "Error allocating hDbc connection handle.")
Screen.MousePointer = saveCursor
Exit Function
End If
result = SQLDriverConnect(hDbc, GetParent(GetFocus()), S$, Len(S$), Server, Len(Server), cbOut%, SQL_DRIVER_COMPLETE)
If result <> SQL_SUCCESS Then
ODBCConnectDriver = result
result = ODBCError("Dbc", ghEnv, hDbc, 0, result, "Error connecting to driver.")
Screen.MousePointer = saveCursor
Exit Function
End If
result = SQLAllocStmt(hDbc, hstmt)
If result <> SQL_SUCCESS Then
ODBCConnectDriver = result
result = ODBCError("Dbc", ghEnv, hDbc, 0, result, "Error allocating statement handle.")
Screen.MousePointer = saveCursor
Exit Function
End If
End Function
Function ODBCConnectDS(hEnv As Long, hDbc As Long, hstmt As Long, DataSource As String, UserID As String, Password As String) As Integer
Dim result As Integer
Dim saveCursor
saveCursor = Screen.MousePointer
Screen.MousePointer = HOURGLASS
ODBCConnectDS = SQL_SUCCESS
Screen.MousePointer = DEFAULT
result = SQLAllocConnect(hEnv, hDbc)
If result <> SQL_SUCCESS Then
ODBCConnectDS = result
result = ODBCError("Dbc", hEnv, hDbc, 0, result, "Error allocating connection handle.")
Screen.MousePointer = saveCursor
Exit Function
End If
result = SQLConnect(hDbc, DataSource, Len(DataSource), UserID, Len(UserID), Password, Len(Password))
If result <> SQL_SUCCESS And result <> SQL_SUCCESS_WITH_INFO Then
ODBCConnectDS = result
result = ODBCError("Dbc", hEnv, hDbc, 0, result, "Error connecting to data source.")
Screen.MousePointer = saveCursor
Exit Function
End If
result = SQLAllocStmt(hDbc, hstmt)
If result <> SQL_SUCCESS Then
ODBCConnectDS = result
result = ODBCError("Dbc", hEnv, hDbc, 0, result, "Error allocating statement handle.")
Screen.MousePointer = saveCursor
Exit Function
End If
End Function
Function ODBCDisconnectDS(hEnv As Long, hDbc As Long, hstmt As Long) As Integer
Dim result As Integer
Dim saveCursor
ODBCDisconnectDS = SQL_SUCCESS
saveCursor = Screen.MousePointer
Screen.MousePointer = HOURGLASS
If hstmt <> 0 Then
result = SQLFreeStmt(hstmt, SQL_DROP)
If result <> SQL_SUCCESS Then
ODBCDisconnectDS = result
result = ODBCError("Env", hEnv, 0, 0, result, "Environment Allocation Error")
End If
End If
If hDbc <> 0 Then
result = SQLDisconnect(hDbc)
If result <> SQL_SUCCESS Then
ODBCDisconnectDS = result
result = ODBCError("Env", hEnv, 0, 0, result, "Environment Allocation Error")
End If
End If
If hDbc <> 0 Then
result = SQLFreeConnect(hDbc)
If result <> SQL_SUCCESS Then
ODBCDisconnectDS = result
result = ODBCError("Env", hEnv, 0, 0, result, "Environment Allocation Error")
End If
End If
Screen.MousePointer = saveCursor
End Function
Function ODBCError(ErrType As String, hEnv As Long, hDbc As Long, hstmt As Long, FuncResult As Integer, CallingMsg As String) As Integer
'Returns the original ODBC function call return
'ErrTypes:
' "Env" for ODBC environment errors
' "Dbc" for data source connection errors
' "Stmt" for SQL statement errors
Dim SQLState As String * 16
Dim DSError As Long
Dim ErrorMsg As String * 511
#If Win32 Then
Dim ErrMsgSize As Long
#Else
Dim ErrMsgSize As Integer
#End If
Dim result As Integer
Dim temp As Integer
Dim i As Integer
Dim tempStr As String
ODBCError = FuncResult
SQLState = String$(16, 32)
ErrorMsg = String$(SQL_MAX_MESSAGE_LENGTH - 1, 32)
Load frmODBCErrors
frmODBCErrors.outErrors.AddItem CallingMsg
frmODBCErrors.outErrors.Indent(frmODBCErrors.outErrors.ListCount - 1) = 1
Select Case FuncResult
Case SQL_ERROR
tempStr = "SQL_ERROR"
Case SQL_INVALID_HANDLE
tempStr = "SQL_INVALID_HANDLE"
Case SQL_NO_DATA_FOUND
tempStr = "SQL_NO_DATA_FOUND"
Case SQL_SUCCESS
tempStr = "SQL_SUCCESS"
Case SQL_SUCCESS_WITH_INFO
tempStr = "SQL_SUCCESS_WITH_INFO"
Case Else
tempStr = "Unidentified error code"
End Select
frmODBCErrors.outErrors.AddItem "Function call result: " & tempStr
frmODBCErrors.outErrors.Indent(frmODBCErrors.outErrors.ListCount - 1) = 2
i = 1
Do
Select Case ErrType
Case "Env"
result = SQLError(hEnv, SQL_NULL_HDBC, SQL_NULL_HSTMT, SQLState, DSError, ErrorMsg, Len(ErrorMsg), ErrMsgSize)
Case "Dbc"
result = SQLError(hEnv, hDbc, SQL_NULL_HSTMT, SQLState, DSError, ErrorMsg, Len(ErrorMsg), ErrMsgSize)
Case "Stmt"
result = SQLError(hEnv, hDbc, hstmt, SQLState, DSError, ErrorMsg, Len(ErrorMsg), ErrMsgSize)
End Select
If ErrMsgSize > 0 Then
frmODBCErrors.outErrors.AddItem "SQLState: " & SQLState
frmODBCErrors.outErrors.Indent(frmODBCErrors.outErrors.ListCount - 1) = 2
frmODBCErrors.outErrors.AddItem "Data Source Error #: " & Trim$(Str$(DSError))
frmODBCErrors.outErrors.Indent(frmODBCErrors.outErrors.ListCount - 1) = 3
frmODBCErrors.outErrors.AddItem ParseError(ErrorMsg, 1)
frmODBCErrors.outErrors.Indent(frmODBCErrors.outErrors.ListCount - 1) = 4
frmODBCErrors.outErrors.AddItem ParseError(ErrorMsg, 2)
frmODBCErrors.outErrors.Indent(frmODBCErrors.outErrors.ListCount - 1) = 4
frmODBCErrors.outErrors.AddItem ParseError(ErrorMsg, 3)
frmODBCErrors.outErrors.Indent(frmODBCErrors.outErrors.ListCount - 1) = 4
frmODBCErrors.outErrors.AddItem ParseError(ErrorMsg, 4)
frmODBCErrors.outErrors.Indent(frmODBCErrors.outErrors.ListCount - 1) = 4
End If
Loop Until result <> SQL_SUCCESS
'expand all of the outline levels
For i = 0 To frmODBCErrors.outErrors.ListCount - 1
frmODBCErrors.outErrors.Expand(i) = True
Next
frmODBCErrors.Show MODAL
End Function
Function ODBCFreeEnv(hEnv As Long) As Integer
Dim result As Integer
ODBCFreeEnv = True
If hEnv <> 0 Then
result = SQLFreeEnv(hEnv)
If result <> SQL_SUCCESS Then
ODBCFreeEnv = False
End If
End If
End Function
Private Sub ODBCLoadFuncs()
'load the ODBC API function names into the ODBCFuncs array
Dim i As Integer
'Core ODBC API functions
ODBCFuncs(0, 1) = "SQLAllocConnect"
ODBCFuncs(0, 2) = "SQLAllocEnv"
ODBCFuncs(0, 3) = "SQLAllocStmt"
ODBCFuncs(0, 4) = "SQLBindCol"
ODBCFuncs(0, 5) = "SQLCancel"
ODBCFuncs(0, 6) = "SQLColAttributes"
ODBCFuncs(0, 7) = "SQLConnect"
ODBCFuncs(0, 8) = "SQLDescribeCol"
ODBCFuncs(0, 9) = "SQLDisconnect"
ODBCFuncs(0, 10) = "SQLError"
ODBCFuncs(0, 11) = "SQLExecDirect"
ODBCFuncs(0, 12) = "SQLExecute"
ODBCFuncs(0, 13) = "SQLFetch"
ODBCFuncs(0, 14) = "SQLFreeConnect"
ODBCFuncs(0, 15) = "SQLFreeEnv"
ODBCFuncs(0, 16) = "SQLFreeStmt"
ODBCFuncs(0, 17) = "SQLGetCursorName"
ODBCFuncs(0, 18) = "SQLNumResultCols"
ODBCFuncs(0, 19) = "SQLPrepare"
ODBCFuncs(0, 20) = "SQLRowCount"
ODBCFuncs(0, 21) = "SQLSetCursorName"
ODBCFuncs(0, 22) = "SQLSetParam"
ODBCFuncs(0, 23) = "SQLTransact"
For i = 1 To 23
ODBCFuncs(1, i) = "Core"
Next
'Level 1 ODBC API Functions
ODBCFuncs(0, 40) = "SQLColumns"
ODBCFuncs(0, 41) = "SQLDriverConnect"
ODBCFuncs(0, 42) = "SQLGetConnectOption"
ODBCFuncs(0, 43) = "SQLGetData"
ODBCFuncs(0, 44) = "SQLGetFunctions"
ODBCFuncs(0, 45) = "SQLGetInfo"
ODBCFuncs(0, 46) = "SQLGetStmtOption"
ODBCFuncs(0, 47) = "SQLGetTypeInfo"
ODBCFuncs(0, 48) = "SQLParamData"
ODBCFuncs(0, 49) = "SQLPutData"
ODBCFuncs(0, 50) = "SQLSetConnectOption"
ODBCFuncs(0, 51) = "SQLSetStmtOption"
ODBCFuncs(0, 52) = "SQLSpecialColumns"
ODBCFuncs(0, 53) = "SQLStatictics"
ODBCFuncs(0, 54) = "SQLTables"
For i = 40 To 54
ODBCFuncs(1, i) = "Level 1"
Next
'Level 2 ODBC API Functions
ODBCFuncs(0, 55) = "SQLBrowseConnect"
ODBCFuncs(0, 56) = "SQLColumnPrivileges"
ODBCFuncs(0, 57) = "SQLDataSources"
ODBCFuncs(0, 58) = "SQLDescribeParam"
ODBCFuncs(0, 59) = "SQLExtendedFetch"
ODBCFuncs(0, 60) = "SQLForeignKeys"
ODBCFuncs(0, 61) = "SQLMoreResults"
ODBCFuncs(0, 62) = "SQLNativeSQL"
ODBCFuncs(0, 63) = "SQLNumParams"
ODBCFuncs(0, 64) = "SQLParamOptions"
ODBCFuncs(0, 65) = "SQLPrimaryKeys"
ODBCFuncs(0, 66) = "SQLProcedureColumns"
ODBCFuncs(0, 67) = "SQLProcedures"
ODBCFuncs(0, 68) = "SQLSetPos"
ODBCFuncs(0, 69) = "SQLSetScrollOptions"
ODBCFuncs(0, 70) = "SQLTablePrivileges"
ODBCFuncs(0, 71) = "SQLDrivers"
ODBCFuncs(0, 72) = "SQLBindParameter"
For i = 55 To 72
ODBCFuncs(1, i) = "Level 2"
Next
End Sub
Private Sub LoadGetInfo()
ODBCGetInfo(0).InfoType = "SQL_ACTIVE_CONNECTIONS"
ODBCGetInfo(0).ReturnType = "I"
ODBCGetInfo(1).InfoType = "SQL_ACTIVE_STATEMENTS"
ODBCGetInfo(1).ReturnType = "I"
ODBCGetInfo(2).InfoType = "SQL_DATA_SOURCE_NAME"
ODBCGetInfo(2).ReturnType = "S"
ODBCGetInfo(3).InfoType = "SQL_DRIVER_HDBC"
ODBCGetInfo(3).ReturnType = "L"
ODBCGetInfo(4).InfoType = "SQL_DRIVER_HENV"
ODBCGetInfo(4).ReturnType = "L"
ODBCGetInfo(5).InfoType = "SQL_DRIVER_HSTMT"
ODBCGetInfo(5).ReturnType = "L"
ODBCGetInfo(6).InfoType = "SQL_DRIVER_NAME"
ODBCGetInfo(6).ReturnType = "S"
ODBCGetInfo(7).InfoType = "SQL_DRIVER_VER"
ODBCGetInfo(7).ReturnType = "S"
ODBCGetInfo(8).InfoType = "SQL_FETCH_DIRECTION"
ODBCGetInfo(8).ReturnType = "B"
ODBCGetInfo(9).InfoType = "SQL_ODBC_API_CONFORMANCE"
ODBCGetInfo(9).ReturnType = "IP"
ODBCGetInfo(10).InfoType = "SQL_ODBC_VER"
ODBCGetInfo(10).ReturnType = "S"
ODBCGetInfo(11).InfoType = "SQL_ROW_UPDATES"
ODBCGetInfo(11).ReturnType = "SY"
ODBCGetInfo(12).InfoType = "SQL_ODBC_SAG_CLI_CONFORMANCE"
ODBCGetInfo(12).ReturnType = "I"
ODBCGetInfo(13).InfoType = "SQL_SERVER_NAME"
ODBCGetInfo(13).ReturnType = "S"
ODBCGetInfo(14).InfoType = "SQL_SEARCH_PATTERN_ESCAPE"
ODBCGetInfo(14).ReturnType = "S"
ODBCGetInfo(15).InfoType = "SQL_ODBC_SQL_CONFORMANCE"
ODBCGetInfo(15).ReturnType = "I"
ODBCGetInfo(17).InfoType = "SQL_DBMS_NAME"
ODBCGetInfo(17).ReturnType = "S"
ODBCGetInfo(18).InfoType = "SQL_DBMS_VER"
ODBCGetInfo(18).ReturnType = "S"
ODBCGetInfo(19).InfoType = "SQL_ACCESSIBLE_TABLES"
ODBCGetInfo(19).ReturnType = "SY"
ODBCGetInfo(20).InfoType = "SQL_ACCESSIBLE_PROCEDURES"
ODBCGetInfo(20).ReturnType = "SY"
ODBCGetInfo(21).InfoType = "SQL_PROCEDURES"
ODBCGetInfo(21).ReturnType = "SY"
ODBCGetInfo(22).InfoType = "SQL_CONCAT_NULL_BEHAVIOR"
ODBCGetInfo(22).ReturnType = "IP"
ODBCGetInfo(23).InfoType = "SQL_CURSOR_COMMIT_BEHAVIOR"
ODBCGetInfo(23).ReturnType = "IP"
ODBCGetInfo(24).InfoType = "SQL_CURSOR_ROLLBACK_BEHAVIOR"
ODBCGetInfo(24).ReturnType = "IP"
ODBCGetInfo(25).InfoType = "SQL_DATA_SOURCE_READ_ONLY"
ODBCGetInfo(25).ReturnType = "SY"
ODBCGetInfo(26).InfoType = "SQL_DEFAULT_TXN_ISOLATION"
ODBCGetInfo(26).ReturnType = "LP"
ODBCGetInfo(27).InfoType = "SQL_EXPRESSIONS_IN_ORDERBY"
ODBCGetInfo(27).ReturnType = "SP"
ODBCGetInfo(28).InfoType = "SQL_IDENTIFIER_CASE"
ODBCGetInfo(28).ReturnType = "IP"
ODBCGetInfo(29).InfoType = "SQL_IDENTIFIER_QUOTE_CHAR"
ODBCGetInfo(29).ReturnType = "S"
ODBCGetInfo(30).InfoType = "SQL_MAX_COLUMN_NAME_LEN"
ODBCGetInfo(30).ReturnType = "I"
ODBCGetInfo(31).InfoType = "SQL_MAX_CURSOR_NAME_LEN"
ODBCGetInfo(31).ReturnType = "I"
ODBCGetInfo(32).InfoType = "SQL_MAX_OWNER_NAME_LEN"
ODBCGetInfo(32).ReturnType = "I"
ODBCGetInfo(33).InfoType = "SQL_MAX_PROCEDURE_NAME_LEN"
ODBCGetInfo(33).ReturnType = "I"
ODBCGetInfo(34).InfoType = "SQL_MAX_QUALIFIER_NAME_LEN"
ODBCGetInfo(34).ReturnType = "I"
ODBCGetInfo(35).InfoType = "SQL_MAX_TABLE_NAME_LEN"
ODBCGetInfo(35).ReturnType = "I"
ODBCGetInfo(36).InfoType = "SQL_MULT_RESULT_SETS"
ODBCGetInfo(36).ReturnType = "SP"
ODBCGetInfo(37).InfoType = "SQL_MULTIPLE_ACTIVE_TXN"
ODBCGetInfo(37).ReturnType = "S"
ODBCGetInfo(38).InfoType = "SQL_OUTER_JOINS"
ODBCGetInfo(38).ReturnType = "SP"
ODBCGetInfo(39).InfoType = "SQL_OWNER_TERM"
ODBCGetInfo(39).ReturnType = "S"
ODBCGetInfo(40).InfoType = "SQL_PROCEDURE_TERM"
ODBCGetInfo(40).ReturnType = "S"
ODBCGetInfo(41).InfoType = "SQL_QUALIFIER_NAME_SEPARATOR"
ODBCGetInfo(41).ReturnType = "S"
ODBCGetInfo(42).InfoType = "SQL_QUALIFIER_TERM"
ODBCGetInfo(42).ReturnType = "S"
ODBCGetInfo(43).InfoType = "SQL_SCROLL_CONCURRENCY"
ODBCGetInfo(43).ReturnType = "B"
ODBCGetInfo(44).InfoType = "SQL_SCROLL_OPTIONS"
ODBCGetInfo(44).ReturnType = "B"
ODBCGetInfo(45).InfoType = "SQL_TABLE_TERM"
ODBCGetInfo(45).ReturnType = "S"
ODBCGetInfo(46).InfoType = "SQL_TXN_CAPABLE"
ODBCGetInfo(46).ReturnType = "IP"
ODBCGetInfo(47).InfoType = "SQL_USER_NAME"
ODBCGetInfo(47).ReturnType = "S"
ODBCGetInfo(48).InfoType = "SQL_CONVERT_FUNCTIONS"
ODBCGetInfo(48).ReturnType = "B"
ODBCGetInfo(49).InfoType = "SQL_NUMERIC_FUNCTIONS"
ODBCGetInfo(49).ReturnType = "B"
ODBCGetInfo(50).InfoType = "SQL_STRING_FUNCTIONS"
ODBCGetInfo(50).ReturnType = "B"
ODBCGetInfo(51).InfoType = "SQL_SYSTEM_FUNCTIONS"
ODBCGetInfo(51).ReturnType = "B"
ODBCGetInfo(52).InfoType = "SQL_TIMEDATE_FUNCTIONS"
ODBCGetInfo(52).ReturnType = "B"
ODBCGetInfo(53).InfoType = "SQL_CONVERT_BIGINT"
ODBCGetInfo(53).ReturnType = "B"
ODBCGetInfo(54).InfoType = "SQL_CONVERT_BINARY"
ODBCGetInfo(54).ReturnType = "B"
ODBCGetInfo(55).InfoType = "SQL_CONVERT_BIT"
ODBCGetInfo(55).ReturnType = "B"
ODBCGetInfo(56).InfoType = "SQL_CONVERT_CHAR"
ODBCGetInfo(56).ReturnType = "B"
ODBCGetInfo(57).InfoType = "SQL_CONVERT_DATE"
ODBCGetInfo(57).ReturnType = "B"
ODBCGetInfo(58).InfoType = "SQL_CONVERT_DECIMAL"
ODBCGetInfo(58).ReturnType = "B"
ODBCGetInfo(59).InfoType = "SQL_CONVERT_DOUBLE"
ODBCGetInfo(59).ReturnType = "B"
ODBCGetInfo(60).InfoType = "SQL_CONVERT_FLOAT"
ODBCGetInfo(60).ReturnType = "B"
ODBCGetInfo(61).InfoType = "SQL_CONVERT_INTEGER"
ODBCGetInfo(61).ReturnType = "B"
ODBCGetInfo(62).InfoType = "SQL_CONVERT_LONGVARCHAR"
ODBCGetInfo(62).ReturnType = "B"
ODBCGetInfo(63).InfoType = "SQL_CONVERT_NUMERIC"
ODBCGetInfo(63).ReturnType = "B"
ODBCGetInfo(64).InfoType = "SQL_CONVERT_REAL"
ODBCGetInfo(64).ReturnType = "B"
ODBCGetInfo(65).InfoType = "SQL_CONVERT_SMALLINT"
ODBCGetInfo(65).ReturnType = "B"
ODBCGetInfo(66).InfoType = "SQL_CONVERT_TIME"
ODBCGetInfo(66).ReturnType = "B"
ODBCGetInfo(67).InfoType = "SQL_CONVERT_TIMESTAMP"
ODBCGetInfo(67).ReturnType = "B"
ODBCGetInfo(68).InfoType = "SQL_CONVERT_TINYINT"
ODBCGetInfo(68).ReturnType = "B"
ODBCGetInfo(69).InfoType = "SQL_CONVERT_VARBINARY"
ODBCGetInfo(69).ReturnType = "B"
ODBCGetInfo(70).InfoType = "SQL_CONVERT_VARCHAR"
ODBCGetInfo(70).ReturnType = "B"
ODBCGetInfo(71).InfoType = "SQL_CONVERT_LONGVARBINARY"
ODBCGetInfo(71).ReturnType = "B"
ODBCGetInfo(72).InfoType = "SQL_TXN_ISOLATION_OPTION"
ODBCGetInfo(72).ReturnType = "B"
ODBCGetInfo(73).InfoType = "SQL_ODBC_SQL_OPT_IEF"
ODBCGetInfo(73).ReturnType = "SP"
ODBCGetInfo(74).InfoType = "SQL_CORRELATION_NAME"
ODBCGetInfo(74).ReturnType = "IP"
ODBCGetInfo(75).InfoType = "SQL_NON_NULLABLE_COLUMNS"
ODBCGetInfo(75).ReturnType = "IP"
#If ODBCVER >= &H200 Then
ODBCGetInfo(76).InfoType = "SQL_DRIVER_HLIB"
ODBCGetInfo(76).ReturnType = "L"
ODBCGetInfo(77).InfoType = "SQL_DRIVER_ODBC_VER"
ODBCGetInfo(77).ReturnType = "S"
ODBCGetInfo(78).InfoType = "SQL_LOCK_TYPES"
ODBCGetInfo(78).ReturnType = "B"
ODBCGetInfo(79).InfoType = "SQL_POS_OPERATIONS"
ODBCGetInfo(79).ReturnType = "B"
ODBCGetInfo(80).InfoType = "SQL_POSITIONED_STATEMENTS"
ODBCGetInfo(80).ReturnType = "B"
ODBCGetInfo(81).InfoType = "SQL_GETDATA_EXTENSIONS"
ODBCGetInfo(81).ReturnType = "B"
ODBCGetInfo(82).InfoType = "SQL_BOOKMARK_PERSISTENCE"
ODBCGetInfo(82).ReturnType = "B"
ODBCGetInfo(83).InfoType = "SQL_STATIC_SENSITIVITY"
ODBCGetInfo(83).ReturnType = "B"
ODBCGetInfo(84).InfoType = "SQL_FILE_USAGE"
ODBCGetInfo(84).ReturnType = "IP"
ODBCGetInfo(85).InfoType = "SQL_NULL_COLLATION"
ODBCGetInfo(85).ReturnType = "IP"
ODBCGetInfo(86).InfoType = "SQL_ALTER_TABLE"
ODBCGetInfo(86).ReturnType = "B"
ODBCGetInfo(87).InfoType = "SQL_COLUMN_ALIAS"
ODBCGetInfo(87).ReturnType = "SP"
ODBCGetInfo(88).InfoType = "SQL_GROUP_BY"
ODBCGetInfo(88).ReturnType = "IP"
ODBCGetInfo(89).InfoType = "SQL_KEYWORDS"
ODBCGetInfo(89).ReturnType = "SP"
ODBCGetInfo(90).InfoType = "SQL_ORDER_BY_COLUMNS_IN_SELECT"
ODBCGetInfo(90).ReturnType = "SY"
ODBCGetInfo(91).InfoType = "SQL_OWNER_USAGE"
ODBCGetInfo(91).ReturnType = "B"
ODBCGetInfo(92).InfoType = "SQL_QUALIFIER_USAGE"
ODBCGetInfo(92).ReturnType = "B"
ODBCGetInfo(93).InfoType = "SQL_QUOTED_IDENTIFIER_CASE"
ODBCGetInfo(93).ReturnType = "IP"
ODBCGetInfo(94).InfoType = "SQL_SPECIAL_CHARACTERS"
ODBCGetInfo(94).ReturnType = "S"
ODBCGetInfo(95).InfoType = "SQL_SUBQUERIES"
ODBCGetInfo(95).ReturnType = "B"
ODBCGetInfo(96).InfoType = "SQL_UNION"
ODBCGetInfo(96).ReturnType = "B"
ODBCGetInfo(97).InfoType = "SQL_MAX_COLUMNS_IN_GROUP_BY"
ODBCGetInfo(97).ReturnType = "I"
ODBCGetInfo(98).InfoType = "SQL_MAX_COLUMNS_IN_INDEX"
ODBCGetInfo(98).ReturnType = "I"
ODBCGetInfo(99).InfoType = "SQL_MAX_COLUMNS_IN_ORDER_BY"
ODBCGetInfo(99).ReturnType = "I"
ODBCGetInfo(100).InfoType = "SQL_MAX_COLUMNS_IN_SELECT"
ODBCGetInfo(100).ReturnType = "I"
ODBCGetInfo(101).InfoType = "SQL_MAX_COLUMNS_IN_TABLE"
ODBCGetInfo(101).ReturnType = "I"
ODBCGetInfo(102).InfoType = "SQL_MAX_INDEX_SIZE"
ODBCGetInfo(102).ReturnType = "L"
ODBCGetInfo(103).InfoType = "SQL_MAX_ROW_SIZE_INCLUDES_LONG"
ODBCGetInfo(103).ReturnType = "SY"
ODBCGetInfo(104).InfoType = "SQL_MAX_ROW_SIZE"
ODBCGetInfo(104).ReturnType = "L"
ODBCGetInfo(105).InfoType = "SQL_MAX_STATEMENT_LEN"
ODBCGetInfo(105).ReturnType = "L"
ODBCGetInfo(106).InfoType = "SQL_MAX_TABLES_IN_SELECT"
ODBCGetInfo(106).ReturnType = "I"
ODBCGetInfo(107).InfoType = "SQL_MAX_USER_NAME_LEN"
ODBCGetInfo(107).ReturnType = "I"
ODBCGetInfo(108).InfoType = "SQL_MAX_CHAR_LITERAL_LEN"
ODBCGetInfo(108).ReturnType = "L"
ODBCGetInfo(109).InfoType = "SQL_TIMEDATE_ADD_INTERVALS"
ODBCGetInfo(109).ReturnType = "B"
ODBCGetInfo(110).InfoType = "SQL_TIMEDATE_DIFF_INTERVALS"
ODBCGetInfo(110).ReturnType = "B"
ODBCGetInfo(111).InfoType = "SQL_NEED_LONG_DATA_LEN"
ODBCGetInfo(111).ReturnType = "SY"
ODBCGetInfo(112).InfoType = "SQL_MAX_BINARY_LITERAL_LEN"
ODBCGetInfo(112).ReturnType = "L"
ODBCGetInfo(113).InfoType = "SQL_LIKE_ESCAPE_CLAUSE"
ODBCGetInfo(113).ReturnType = "SY"
ODBCGetInfo(114).InfoType = "SQL_QUALIFIER_LOCATION"
ODBCGetInfo(114).ReturnType = "IP"
#End If
End Sub
Private Function ParseError(Message As String, Place As Integer)
'Split out the pieces of the ODBC error message
'Structure of non-data source Message: [Vendor][ODBC component]Component supplied text
'Structure of data source Message: [Vendor][ODBC component][Data Source identifier]Data Source supplied text
Dim i As Integer
Dim posLeft As Integer
Dim posRight As Integer
Dim newLeft As Integer
Dim textLeft, textRight
Dim text As String
Static lBrackets(1 To 4) As Integer 'array of left-bracket locations
Static Rbrackets(1 To 4) As Integer 'array of right-bracket locations
Static msgType As String
Message = Trim$(Message)
If Message = "" Then
ParseError = ""
Exit Function
End If
newLeft = 1
If Place = 1 Then 'new message, so re-parse
For i = 1 To 3
lBrackets(i) = InStr(newLeft, Message, "[")
Rbrackets(i) = InStr(newLeft, Message, "]")
newLeft = Rbrackets(i) + 1
Next
msgType = IIf(lBrackets(3) = 0, "NDS", "DS")
End If
If lBrackets(Place) > 0 Then 'that term exists as a bracketed item
textLeft = lBrackets(Place) + 1
textRight = Rbrackets(Place) - 1
text = Mid$(Message, textLeft, textRight - textLeft + 1)
Else
text = Right$(Message, Len(Message) - Rbrackets(Place - 1))
End If
Select Case Place
Case 1
ParseError = "Driver Vendor: " & text
Case 2
ParseError = "ODBC Identifier: " & text
Case 3
ParseError = IIf(msgType = "DS", "Data Source: ", "") & text
Case 4
ParseError = "Error: " & text
Case Else
ParseError = ""
End Select
End Function